/**
 * @class
 * @memberof ScLibs.ui
 * @property {jQuery} el jquery 오브젝트
 * @desc 사인이 가능하게 만든다.
 * @example
 * var sign = new ScLibs.ui.Signature($("#sign"));
 * sign.on("change", function(){ })
 */
ScLibs.ui.Signature = ScLibs.extend(ScLibs.Observer, {
	initialize: function(el, config){
		this.config = {
			autoRender: true
		};

		this.config = $.extend(this.config, config);
		
		var listener = { };
		if(this.config.listener){
			listener = this.config.listener;
		}
		ScLibs.ui.Signature.base.initialize.call(this, listener);

		this.el = el;
		if(this.config.autoRender){
			this.render();
		}
	},
	render: function(){
		this.el.jSignature({
			sizeRatio: 1,
			'decor-color': null
		});
		
		this.el.on("change", $.proxy(function(e){
			this.changeEvent();
		}, this));
	},
	changeEvent: function(){
		this.fireEvent(this, 'change', [this, this.el.jSignature("getData")]);
	},
	/**
	 * @method
	 * @memberof ScLibs.ui.Signature.prototype
	 * @return {String} data 캔버스의 base64 인코딩된 문자열
	 * @desc 서명 데이터를 문자열로 반환한다.
	 */
	getData: function(){
		return this.el.jSignature("getData");
	},
	/**
	 * @method
	 * @memberof ScLibs.ui.Signature.prototype
	 * @param {String} data 캔버스의 base64 인코딩된 문자열
	 * @desc 캔버스에 서명 이미지를 표현한다.
	 */
	setData: function(data){
		this.clear();
		this.el.jSignature("setData", data);
	},
	/**
	 * @method
	 * @memberof ScLibs.ui.Signature.prototype
	 * @desc 캔버스를 모두 지운다.
	 */
	clear: function(){
		this.el.jSignature("clear");
	}
});

